#include "VideoPlayer.h"
#include <QDebug>

// VideoPlayer::VideoPlayer(QObject *parent) : QObject(parent)
// {
//     //av_register_all(); //初始化FFMPEG库
//     //avformat_network_init(); //初始化网络相关功能
// }

// VideoPlayer::~VideoPlayer()
// {
//     closeVideo();
// }

// bool VideoPlayer::openVideo(const QString &filePath)
// {
//     if(avformat_open_input(&formatContext,filePath.toStdString().c_str(),nullptr,nullptr) != 0){
//         qWarning() << "Failed to open video file";
//         return false;
//     }

//     if(avformat_find_stream_info(formatContext,nullptr) != 0){ //查找视频流
//         qWarning() << "Failed to retrieve stream info";
//         return false;
//     }

//     videoStreamIndex = -1;
//     //遍历所有流 查看第一个视频流的索引
//     for(int i = 0; i < formatContext->nb_streams; i++){
//         if(formatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){
//             videoStreamIndex = i;
//             break;
//         }
//     }

//     if(videoStreamIndex == -1){
//         qWarning() << "No video stream found";
//         return false;
//     }

//     codecContext = avcodec_alloc_context3(nullptr);//分配解码器上下文
//     avcodec_parameters_to_context(codecContext, formatContext->streams[videoStreamIndex]->codecpar);//将视频流参数转换成解码器上下文
//     codec = avcodec_find_decoder(codecContext->codec_id);//查找对应的视频解码器
//     if(!codec || avcodec_open2(codecContext,codec,nullptr)<0){ //打开解码器
//         qWarning() << "Failed to open codec";
//         return false;
//     }

//     frame = av_frame_alloc();//分配一个AVFrame用于存储解码后的帧
//     return true;

// }

// QImage VideoPlayer::readFrame()
// {
//     if(av_read_frame(formatContext,&packet)<0){ //从视频流中读取压缩数据包
//         qWarning() << "Fail to read frame";
//         return QImage();
//     }

//     if(packet.stream_index == videoStreamIndex){
//         if(avcodec_send_packet(codecContext,&packet)<0){ //发送数据包到解码器
//             qWarning() << "Failed to send packet to decoder";
//             return QImage();
//         }

//         if (avcodec_receive_frame(codecContext, frame) == 0) { //接受解码后的帧
//             if (!swsContext) {
//                 swsContext = sws_getContext(codecContext->width, codecContext->height, codecContext->pix_fmt,
//                                             codecContext->width, codecContext->height, AV_PIX_FMT_RGB24,
//                                             SWS_BICUBIC, nullptr, nullptr, nullptr);
//             }

//             uint8_t *data[4];
//             int linesize[4];
//             av_image_alloc(data, linesize, codecContext->width, codecContext->height, AV_PIX_FMT_RGB24, 1);

//             sws_scale(swsContext, frame->data, frame->linesize, 0, codecContext->height, data, linesize);

//             QImage img(data[0], codecContext->width, codecContext->height, QImage::Format_RGB888);

//             av_freep(&data[0]);

//             return img;
//         }
//     }
//     return QImage();
// }

// void VideoPlayer::closeVideo()
// {
//     if (frame) {
//         av_frame_free(&frame);
//         frame = nullptr;
//     }
//     if (codecContext) {
//         avcodec_free_context(&codecContext);
//         codecContext = nullptr;
//     }
//     if (formatContext) {
//         avformat_close_input(&formatContext);
//         formatContext = nullptr;
//     }
//     if (swsContext) {
//         sws_freeContext(swsContext);
//         swsContext = nullptr;
//     }
// }

